home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-12-12 | 71.3 KB | 2,120 lines |
- Sega Programming FAQ September 14, 1994, Sixth Edition
- =============================================================
-
- This FAQ (Frequently Asked Questions) is about how to program
- the Sega Genesis and Mega Drive Video Games Systems.
-
- This file IS Public Domain, and can be used by all.
- You may copy and post this file elsewhere. Share and enjoy.
-
- If you want to add anything, especially game code or
- information on the hardware please E-mail me. My E-mail
- and real address are below and at the end of this FAQ.
-
- Disclaimer : In no way I am indorsing any products, systems,
- etc. What I am doing is providing the information that I
- have found throughout internet and other network systems and
- reporting them here, with out reverse engineering. All
- information is reported as is- I will not accept any
- responsibility if you fry your system trying something out.
-
- All copyrights are owned by their respective owners, no
- infringements intended.
-
- Henry Rieke
- <U6c16@Wvnvm.Wvnet.Edu>
-
- US Mail:
-
- Henry Rieke
- Attn: Sega FAQ
- 161 Poplar Dr
- Morgantown, Wv 26505-2340
-
- =============================================================
-
- 0.1 Changes, Updates and Coming Soon
-
- 1) Graphic, Video, and processor maps have been added. Major stuff here.
- In fact, enough to being programming your own games.
-
- 2) With a sad note, I have to report that the Sega listserver
- has died a death of low usage, and long with that went the site
- on Busop. I am in the process of locating a new site(s), and
- will make the apporte posts when I do. If you have a site that you
- admin, and are willing to donate some disk space, let me know please.
- The good news of this is that these new sites will be mirrored so you
- could find the files quicker. I am also working on a WWW version of this
- document, and if you know of a site to put it, let me know.
-
- 3) Coding for the four player tap from Electonic Arts has been added.
- Does anyone have the code for the multi-tap from Sega, and how it works?
-
- 4) I am now beginning to work on a topic header on languages that
- you can program in for the Sega and Sega CD ROM. If you have any
- direct information (compiler, how to compile, etc) let me know so
- I can include it.
-
- =============================================================
-
- 1.0 Questions
-
- Q) What are the differences between Mega Drive and Genesis?
- What are the differences between Mega CD and Sega CD?
-
- A) Physically, on the outside, the only difference is the
- plastic case, the cartridge shape is slightly different on
- the American version, smaller in size. On the inside there
- are four jumpers labeled J1 though J4. J1 and J2 is the
- language switch, between English and Japanese, J3 and J4
- select the output between PAL and NTSC. You can build a
- switch that can allow you to select between these options.
- The diagram is included in this document (Chapter 5.0,
- called "Language Switch"). The reason for the language
- switch is to keep people from getting the game before it
- is officially released elsewhere in the world. The newer
- Sega Machines do not have the jumpers, and hence you can
- not build a switch (as of yet).
-
- The difference between Mega CD and Sega CD are internal.
- In side the machine there is a ROM BIOS chip which is changed
- for different markets. Sega has a version of the BIOS which
- will play any system's games, but this is for Game developing
- and testing. There is a device called Pro-CDX which will allow
- you to by-pass the lockout and play any country's games.
-
- Q) Where to find files on the Sega Genesis/Mega Drive
- hardware?
-
- A) You can find the files on the Sega hardware from one of
- the following FTP sites. A brief section describing memory
- and cartridge ROMs are included in this FAQ. The author
- Rick McTeague, is from Louisville and the most current copy
- can be found there first.
-
- FTP ftp.spd.louisville.edu
- pub\sega\hardware.txt
-
- FTP sunsite.unc.edu
- pub\micro\games\sega\faqs\incoming\hardware.txt
- It's in there. I'm not sure of the exact location.
- There are also many other files here as well as a few
- 68000 ASM. <-- yet to be moved and posted. Working on
- it.
-
-
- Q) What does it take to program the Genesis?
-
- A) Development kits can be bought from many companies, a list
- is included in the section called "Companies". These kits
- require an IBM or Amiga computer to compile the code,
- which is usually assembly, but can be in C as long as it
- can be compiled into 68000 binary. SEGA's own kit is extremely
- expensive and they are rumored to have slow response time
- to answer questions. The price of the kits cost from $1000
- to $4000.
-
- Q) Is IBM or Amiga the only two platforms for game
- development?
-
- A) No. The Apple Macintosh does have a system, which does allow
- you to compile games, but it is a do-it yourself job (See below
- for the whole scope). There also is a system for the Apple IIgs,
- called Sluggo from Parsons Engineering. As for the Mac, if you
- know, please pass it on. It is rumored that Electronic Arts uses
- a priority system on the Macintosh for porting the games.
-
- -- This information comes from Landon Dyer <landon@apple.com>,
-
- -- You can generate 68K code for the Sega "trivially" with the
- C compiler and assembler in the Macintosh programmer's workshop
- (MPW). You'll need to hack up some transfer utilities, but this
- is not really hard. You can wire-wrap a ROMulator, or buy one;
- there are a bunch on the market that should work just fine.
- I had a ROMulator and a debugger up and running in about a
- week, working evenings. (Ed note: ROMular information can be found
- at the FTP sites)
-
- Q) How do I program the SEGA CD Rom?
-
- A) I am beginning to understand how to program this device,
- but more information is needed, so if you have any, please
- pass it along to me so I can include it in the next update.
- Look under Hardware 2.1, Sega CD for more information about
- the unit.
-
- Q) What is Saturn, and how do I program that?
-
- A) Saturn is Sega's next generation game machine, which
- is based on Sega's S-1 /S-2 arcade Machine's motherboard.
- Rumor has it that it will allow programming in C as
- well as Assembly, and porting of arcade games that are
- based on the S-1 and S-2 boards will take only a week.
- There is good news and bad news as well.
- Good news, Microsoft will be writing the OS.
- Bad new, Microsoft will be writing the OS.
-
- Q) What else is there on Internet?
-
- A) Well there is the Sega Programming forum, which you can
- join by subscribing to it with this command:
- Send a message to Listserv@Busop.Cit.Wayne.Edu with the
- first line reading SUBSCRIBE MEGADEV
- To unsubscribe, do the same above, except the first line
- should read UNSUBSCRIBE MEGADEV
-
- There is also Rec.Games.Video.Programmer and
- Rec.Games.Video.Sega where you can ask your questions.
-
- There are also files on how to use the old SEGA 3D glasses
- with your IBM compatible computer which can be found all
- over the place (including the above FTP sites).
-
- =============================================================
-
- 2.0 Hardware : This is the inner workings of the Sega system
- ROM and Memory. For a better understanding Sega Hardware I
- suggest reading Hardware.txt. An up-to-date version of this
- file can be gotten by anonymous ftp from Ftp.spd.louisville.edu,
- in the file "Pub/sega/Hardware.txt".
-
- Genesis - this information comes from Rick McTeague.
-
- Sega Genesis Hardware Internals - Revised: 04/07/1993
-
- Please send corrections or comments to:
-
- Rick McTeague
- Sysrick@starbase.spd.louisville.edu
-
- Disclaimers:
-
- The following information was extracted without the use of
- official information from Sega Enterprises, Ltd. I therefore
- offer no warranty on the correctness of this information.
- Use it at your own risk.
-
- This information was gathered as a personal project, and is
- not the responsibility of my employer.
-
- Different versions of the Genesis exist, so I won't suggest
- that any of this information is right for anybody's Genesis
- but my own.
-
- Sega, Genesis, Sonic the Hedgehog, and Ecco the Dolphin are
- trademarks of Sega Enterprises, Ltd. Other trademarks are the
- property of their respective companies.
-
-
- The Cartridge ROM
- -----------------
-
- As others on the net have observed, a standard Genesis
- cartridge is nothing more than a small printed circuit board
- with a ROM on it. There are some cartridges which have
- battery-backed RAM for saving high scores, configurations,
- etc., but I haven't seen these, so I don't know about them.
- If you know of a particular cartridge that has RAM, let me
- know so I can go rent one and take it apart (shhhh!) to see
- what's in it.
-
- A cartridge contains a word-wide (16 bit) ROM with up to 2
- Meg words (4 Mbytes). This is based on the signal !C_CE, which
- is used as the cartridge ROM's chip enable on the cartridges
- I've looked at, and which is active at addresses $000000-$3fffff.
-
- It may be possible to have more than 4 Mbyte cartridges; if
- so, either they ignore the !C_CE line and do their own
- address decoding, or there's a register somewhere in the
- Genesis which changes the default address decoding scheme for
- !_CE.
-
- Note that cartridges are advertised as being "8 Meg"; as far
- as I know, is 8 Meg _bits_, not bytes. 1 Mbyte is still
- pretty impressive for a game machine.
-
- SONIC uses a 40-pin 256Kx16 (512Kx8) ROM in word mode.
-
- Ecco the Dolphin uses a 42-pin 512Kx16 (1024Kx8) ROM in word
- mode. This one confused me because I'd never seen a 42-pin
- DIP before, so I thought it was 40 pins. No wonder the
- signals didn't look right...
-
- Putting together a little bit of information from a Sharp
- data sheet for a 512 Kword ROM with a bit of conjecture based
- on the Sonic and Ecco cartridges, this is what I can come up
- with for pinouts:
-
- Sonic Ecco
- (256 Kword) (512 Kword)
-
- ----u----
- ----u---- A18 1=| |=42 VCC?
- A17 1=| |=40 A 8 A17 2=| |=41 A 8
- A 7 2=| |=39 A 9 A 7 3=| |=40 A 9
- A 6 3=| |=38 A10 A 6 4=| |=39 A10
- A 5 4=| |=37 A11 A 5 5=| |=38 A11
- A 4 5=| |=36 A12 A 4 6=| |=37 A12
- A 3 6=| |=35 A13 A 3 7=| |=36 A13
- A 2 7=| |=34 A14 A 2 8=| |=35 A14
- A 1 8=| |=33 A15 A 1 9=| |=34 A15
- A 0 9=| |=32 A16 A 0 10=| |=33 A16
- !CE 10=| |=31 !BYTE !CE 11=| |=32 !BYTE
- GND 11=| |=30 GND GND 12=| |=31 GND
- !OE 12=| |=29 D15 !OE 13=| |=30 D15
- D 0 13=| |=28 D 7 D 0 14=| |=29 D 7
- D 8 14=| |=27 D14 D 8 15=| |=28 D14
- D 1 15=| |=26 D 6 D 1 16=| |=27 D 6
- D 9 16=| |=25 D13 D 9 17=| |=26 D13
- D 2 17=| |=24 D 5 D 2 18=| |=25 D 5
- D10 18=| |=23 D12 D10 19=| |=24 D12
- D 3 19=| |=22 D 4 D 3 20=| |=23 D 4
- D11 20=| |=21 VCC D11 21=| |=22 VCC
- --------- ---------
-
- Note that the address line numbering is different than that
- of the 68000; line A0 of the ROM is really connected to the
- 68000's A1. This is because of the way the 68000 handles
- even/odd byte addressing using !UDS and !LDS.
-
- The !BYTE line is held high. This puts the ROM chip into
- "word" mode, where data is accessed 16 bits at a time.
-
- The convenient correspondence between ROM and 68000 data and
- address lines (ROM D0 = 68K D0, ROM D1 = 68K D1, etc..., and
- ROM A0 = 68K A1, ROM A1 = 68K A2, etc...) may not exist in
- all cartridge designs. This is sometimes difficult to
- visualize, but keep in mind that the ROM doesn't care whether
- its D0 is really D0, or if its A3 is really A3, etc. As long
- as each data line is used as the same D## line for both
- programming and reading, and each address line is used as the
- same A## for both programming and reading, the ROM will
- function properly and the 68000 will see the right
- instructions. Think about it...
-
- Why bring this up? If you remove the ROM from the cartridge
- PCB and try to read it with a EPROM programmer, there may be
- situations where you won't see valid 68000 instructions, or
- things won't be in the right place... Assuming your
- programmer isn't messed up, this would be because the address
- and data lines on the ROM aren't assigned the way you'd
- expect.
-
- Why would someone make a cartridge like this? To make your
- life difficult, if you're wanting to hack their ROMs, or to
- make their life easy, by making the cartridge PCB easier to
- design.
-
- The easiest way to avoid this potential problem is to build
- an adapter from your programmer's EPROM socket to an edge
- card connector into which you plug the cartridge. This is a
- bit safer, too, so you don't have to remove the ROM from the
- cartridge (or even open it up).
-
- The Memory Map
- --------------
-
- $000000 $3fffff Cartridge ROM, when enabled by cartridge
- control register and !CART_IN.
-
- $000000 $0007ff Internal OS ROM, when enabled by cartridge
- control register and !CART_IN.
-
- $ff0000 $ffffff 64Kbytes scratchpad RAM
- Partially decoded; RAM actually appears repeated between
- $e00000 through $ffffff.
-
- $a14101 cartridge control register
- bit 0 = 0: cartridge disabled, OS ROM enabled
- bit 0 = 1: cartridge enabled, OS ROM disabled
-
- $a00000 $a????? Unknown. Audio? Controller I/O?
-
- $c00000 $c????? Video display controller registers
-
- The OS puts the top of its stack at $ffff00, and defines a
- "user stack pointer" at $000000 (building down through the
- top of RAM memory).
-
- The Z80 processor is used for sound and has 8Kbytes of RAM.
- I don't know anything about how the Z80 does its work, as I
- haven't looked.
-
- Acknowledgements
- ----------------
- Thanks to:
-
- dt93tn@pt.hk-r.se (Tore Nestenius) for info on older Genesis
- systems.
-
- lewism@rpi.edu (Michael Lewis) for info on the Sony CXA1145
- and Samsung KM6264 chips.
-
- crs@crs-sys.uucp (Chris Gregors) for posting a version of the
- Genesis cartridge port pinouts.
-
- merlyn@digibd.com (Brian Westley) for Game Genie information
- and decoder program.
- ------------------------------------------------------------
-
- Brief technical description of the Genesis:
-
- ---
- The genesis graphics hardware consists of 2 scrollable planes.
- Each plane is made up of tiles. Each tile is an 8x8 pixel square
- with 4 bits per pixel. Each pixel can thus have 16 colors. Each
- tile can use 1 of 4 color tables, so on screen you can get 64
- colors at once, but only 16 in any specific tile. Tiles require
- 32 bytes. There is 64K of graphics memory. This would allow
- for 2048 unique tiles if memory were used for nothing else.
-
- Each plane can be scrolled independently in various ways.
- Planes consist of tables of words, where each word describes a
- tile. The word contains 11 bits for describing which tile, 2 bits
- for flip x and flip y, 2 bits for the selection of the color table,
- and 1 bit for a depth selector. Sprites are composed of tiles also.
- A sprite can be up to 4 tiles wide by four tiles high. Since each
- tile is 8x8, this means sprites can be anywhere from 8x8 pixels to
- 32x32 pixels. There can be 80 sprites on screen at one time. On a
- scan line you can have 10 32 pixel wide sprites or 20 16 pixel wide
- sprites. Each sprite can only have 16 colors but they are out of the
- 4 different color tables. Color 0=transparent.
-
- Colors are 3 bits for each gun, so 512 colors are possible.
-
- There is a memory copier that is in hardware. This does fast copies from
- the 68000 ram into the graphics ram.
-
- The 68000 runs at about 8 mhz. It has 64K of memory devoted to it. The
- ROM cartridge appears at 0.
-
- The Z80 has 8K of ram. The 68000 can download programs to the z80 and
- let them go. The z80 can access the graphics chips or the sound synth
- chips but usually those things are controlled by the 68000.
-
- The sound chips consist of a Yamaha synthesis chip and a TI programmable
- sound generator. The PSG has 3 square wave tones and 1 white noise tone.
- Each tone/noise channel can have its own frequency and volume.
-
- The Yamaha chips are based on FM synthesis. There are 6 voices with 4
- operators each. The chips are similiar to those used in the Yamaha
- DX27 and DX100 synthesizers. By setting up registers a rich variety of
- sounds can be created.
-
- ------------------------------------------------------------
-
- 2.1 Sega CD Rom. The following information came from
- Leyland@island.COM (Robert Leyland), who was a programmer for the
- most excellent Sega CD Rom game - Flying Aces. (Plug!Plug!
- Plug!Plug!Plug!Plug!)
-
- -- The Sega CD is ISO 9660 format, with proprietary start-up code
- that must be licensed from SEGA in order to work. For programming
- you use two PC's, one connected to a debugging system and the other
- emulated an CD-ROM drive.
- The trickiest part of programming the Sega CD/Genesis combo is
- keeping the two CPU's synchronized. For some reason the single
- hardest thing to do with any computer is get it to talk reliably
- with another computer.
- --
-
-
- ------------------------------------------------------------
-
- 2.2 Joystick - 3 button version - Could some please post a 6
- button version?
-
- By: nhowland@matt.ksu.ksu.edu (Neal Howland) for information
- on the Joystick port.
-
- First some background info: The chip inside the controller
- is a 74HC157. This is a high-speed cmos quad 2-line to
- 1-line multiplexer. Basically how this works is there are two
- inputs ( A and B ) for every output ( Y ). There are four
- groups like this. There is one select signal for the whole
- chip. When the select signal is low, the output ( Y ) is the
- same as input A. When the select signal is high, the output
- Y is the same as input B. The pinout for the chip is as
- follows:
-
- Pin 1 - SelectPin 16 - Vcc (+5V)
- Pin 2 - 1APin 15 - G (? must be low)
- Pin 3 - 1BPin 14 - 4A
- Pin 4 - 1YPin 13 - 4B
- Pin 5 - 2APin 12 - 4Y
- Pin 6 - 2BPin 11 - 3A
- Pin 7 - 2YPin 10 - 3B
- Pin 8 - GndPin 9 - 3Y
-
-
- All the controls are done with switches. Up is a switch,
- Down is a switch, etc. Now, I will be referring to the output
- of these switches later on. What I mean is that the output is
- usually high, that is when the switch isn't pressed.
-
- When the button is pushed, the output goes low. This is
- accomplished by connecting the output to +5V through a 10k
- resistor. The button is then attached between the output and
- ground. It looks like this:
-
- +5V -----/\/\/------+--------- Output
- 10k |
- |
- / |
- Ground -----/ -------+
- button
- (normally open)
-
- For all of those who could actually decipher the above
- schematic, congratulations!
-
-
- I will now run down what lines from the plug are connected to
- what. The line numbers are determined as follows, looking
- straight at the plug on the front of the Genesis the numbers
- are:
-
- 1 2 3 4 5
- 6 7 8 9
-
- (For those of you who buy a joystick cable from radio shack
- the pin #'s to wire colors are as follows: 1-white 2-blue
- 3-green 4-brown 5-yellow 6-orange 7-red 8-black 9-gray )
-
- anyway, line connections:
-
- Line 1 - Up output These are the only two direct
- Line 2 - Down output connections
-
- Line 3 - Pin 4 of the chip output 1Y
- Line 4 - Pin 7 of the chip output 2Y
-
- Line 5 - This line carries in +5V. It is connected to the
- +5V bus line.
-
- Line 6 - Pin 9 of the chip output 3Y
- line 7 - Pin 1 of the chip this carries in a select signal
- from the Genesis. This is a signal which varies
- rapidly and controls which input goes through the
- output.
-
- Line 8 - Ground This is connected to the Ground bus line.
- Line 9 - Pin 12 of the chip output 4Y
-
- Now for the chips pin connections:
-
- Pin 1 - Line 7 (select)
- Pin 2 - Ground (1A) Don't ask me why they do this. Maybe
- Pin 3 - Left (1B) future expansion
- Pin 4 - Line 3 (1Y)
- Pin 5 - Ground (2A) Again, possibly future expansion
- Pin 6 - Right (2B)
- Pin 7 - Line 4 (2Y)
- Pin 8 - Ground (GND)
- Pin 9 - Line 6 (3Y)
- Pin 10 - Button B (3B)
- Pin 11 - Button A (3A)
- Pin 12 - Line 9 (4Y)
- Pin 13 - Button C (4B)
- Pin 14 - Start (4A)
- Pin 15 - Ground (G) This must be connected to ground
- Pin 16 - +5V (Vcc) Power source for the chip
-
- Anyway that's all the info needed to build your own joystick.
-
- Now as an added bonus, additional information!
-
- A simple source for a joystick cable is the Radio Shack
- joystick extension cable. It is around $5 and is 10 ft. long.
- Just snip off the connector that won't plug into the Genesis,
- strip the wires back, and use the color pinout list I gave
- above.
-
- I went to my local arcade game repair company today and
- purchased the supplies I needed. They were much cheaper than
- I expected. Things you would need to buy from them would be:
-
- an 8-way joystick this ran me $15
- 3 buttons $2.50 apiece
-
- I only bought three buttons because I am going to use a Radio
- Shack push button switch for my start button. You can purchase
- 4 arcade game buttons if you wish.
-
- Interesting ideas for extras on the joystick:
-
- 1. Autofire can be achieved with a simple 555 timer circuit.
-
- For anyone wanting a challenge it should be possible to
- build a digital autofire using a divide-by-n counter with the
- select signal as clock input.
-
- 2. Slow down mode is just autofire for the start button.
-
- =============================================================
-
- 3.0 Companies - these companies produce the hardware that is
- required to write games for the Genesis. The original
- document came from: Scott Golby <sgolby@st.nepean.uws.edu.au>
-
- Hi Everyone,
-
- Here is the current list of info I have about the Sega.
-
- I have had about 10 replies so far asking to pass my
- info on. If people want I will pass their EMail address on
- to everyone else so we can work as a group. Drop me a line
- if you want to be added to the 'group' list.
-
- ***** <----- Five astrict like this means info from
- different people
-
- Sega Genesis Developer Resources
-
- Dan Chang April 18, 1993
-
- Sega of America Inc
- Consumer Products Division
- 125 Shoreway Road
- San Carlos, California, 94070
- Tel : (415) 802-4400
- Fax : (415) 802-4458
-
- Stuart Kosoy is the person to contact at Sega of America
- at (415)802-4407.
-
- Products : Detailed SEGA Genesis technical information. GEMS
- SEGA music development package.
- Solution : Music and Sound effects package for the Sega. SOA
- can provide detailed information on programming the Genesis;
- however they will want to know more about your company first.
-
- Western Technologies, Inc.
- 12057 Jefferson Blvd
- Culver City, California, 90230
- Tel : (310) 821-7880
- Fax : (310) 306-1739
-
- Products : SegaDev Card. PC-Hosted Genesis development
- hardware, which includes SEGADEV.EXE, a Windows-hosted
- source-level debugger, and SEGALOAD.EXE, a PC_hosted 68000
- object code downloader.
- Solutions : SEGA Genesis Hardware, WT recommends Sierra
- Systems 68000 Assembler.
-
-
- Sierra Systems
- 6728 Evergreen Ave
- Oakland California 94611
- Tel : (510) 339-8200 or (800) 776 4888
- Fax : (510) 339 3844
-
- Products : PC-hosted Sierra C cross-compiler, which included
- 68000 C compiler, assembler, linker.
-
- Contact person at Sierra Systems is Larry Rosenthal
- E-Mail Sierra@netcom.com
-
-
- Motorola, Literature Dist
-
- This entry basically has a list of 68000 reference and
- programming books.
-
-
- Echidna
- 1101 W Stevens Ave, Suite 232
- Santa Ana California 92707
- Tel : (714) 545-2662
- Fax : (714) 545-3705
-
- Products : tUME - the Universal Map Editor. PC-Hosted tool to
- edit tile-maps.
- Solutions : Saves time in designing game maps and placing
- level information. Downloads maps to Western Techs SegaDev
- card.
-
- A tUME demo can be found by FTP busop.cit.wanye.edu under
- /pub/megadev/incoming/tumedemo.zip
- Well worth a look.
-
-
- Cross Products Limited
- 23 The Calls
- Leeds LS2 7EH, England
- Tel 0532 429814
- Fax 0532 426163 (dial 011 44 532 426163 from USA)
-
- Product : SNASM68K : PC-Hosted SEGA Genesis development
- system, which includes a 68000 assembler, linker, debugger.
-
-
- Parsons Engineering
- Imhurst Ave
- Covina California 91724
- Tel (818) 966 5538
-
- Products : PC/Apple IIgs hosted Sluggo Genesis development
- hardware.
-
-
- Advantech
- 1333 E.9400 South, Suite 160
- Sandy Utah, 84092
- Tel : (801) 572-5410
- Fax : (810) 572-5674
-
- Products : blank SEGA Genesis cartridge PC boards, blank
- EPROMS.
-
- *****
- Genesis Development System Frequently Asked Questions
-
- Q:What is the Genesis Development System?
-
- A:The GDS is a cross development system that lets you develop games and other
- software to run on the Sega Genesis. The system consists of a 4 inch by 8
- inch printed circuit board that plugs in the cartridge slot of the Genesis,
- and has a cable going to the parallel port of the host computer. A complete
- software set is included consisting of an integrated editor/assembler, a
- stand alone assembler, a symbolic debugger, a music and sound effect editor,
- a utility to break standard 16 color IFF images into tiles to be downloaded
- to the Sega, a utility to capture screen graphics on the Genesis, a
- utility to send an LBM image to the Genesis for preview, a linker for
- joining multiple object modules, and several example files.
-
- Q:Does it come with any source files?
-
- A:You get source to the music editor, source to a Z80 program to run on the
- genesis to interpret the music files, source to a demo program that plays
- music and has sprites bouncing around behind the Sega logo, source to the
- download utilities. Complete source is provided on communicating between
- the host machine and the Genesis.
-
- Q:How much memory does it have on the board?
-
- A:It comes with 2.25 or 4.25 megabytes of memory. Older versions had 1.25
- megabytes. 256K is reserved for use by the debugger for variable
- storage and symbols.
-
- Q:Can you program CD games with it?
-
- A:It is not specifically designed for a CD. You could program as if you're
- creating a cartridge then modify the code later to make it work on the
- CD. I provide no information on the Genesis CDROM drive. I don't own one
- myself. The Genesis CDROM market is perhaps 10% of the cartridge market.
-
- Q:Does it include technical specifications for the Genesis?
-
- A:Yes, it comes with descriptions of the memory map, graphics registers, the
- Z80's functions, reading the joysticks, sprites, scrolling, tiles, the
- DMA copier, the audio chips-in short everything required to program the
- genesis. Also provided are several working demos with source.
-
- Q:Is this proprietary information stolen from Sega?
-
- A:No, the information on the Genesis came from reverse engineering it,
- completely independent of Sega. There are no copyright violations in the
- purchase or sale of this development system, nor is there anything illegal
- about any use of it.
-
- Q:How does it work?
-
- A:The board has ROMs on it which contain the monitor and debugger that runs
- on the Genesis. When the Genesis is reset, the ROMs take over and wait for
- commands to come from the host machine-commands like download bytes, send
- bytes back, set up registers, define a symbol, or enter the interactive
- debugger. When in the interactive debugger the host machine acts as a
- terminal, and characters are sent over the cable. Full 68000 debugging
- is possible, including disassembly, single step, register view and modify,
- breakpoints, expression evaluation, memory view, modify, search and copy,
- symbol definition, memory compare. There is also a z80 disassembler built
- in.
-
- Q:What about the assembler?
-
- A:The assembler is a full macro 68000 assembler, and includes the full 8080
- and parts of the Z80 instruction set. It generates symbol table information
- that can be downloaded to the Genesis to allow for symbolic debugging.
- On a 66 Mhz DX2 the assembler is about 550,000 lines/minute. There is also
- a linker which combines multiple object files.
-
- Q:Can I program in C?
-
- A:There is no C compiler included in the package. In the future there
- may be.
-
- Q:How do I make artwork? Is there a sprite editor?
-
- A:Originally I planned on including a simple graphic editor, but I found that
- no one used it-instead they used Dpaint. The best way is to use dpaint to
- create graphics in lo-res 16 color mode, then to use the utility I provide
- to convert them to raw data to be sent to the Sega. Animation can be done
- within Dpaint. Unfortunately there is no editor for manipulating giant
- figures made out of sprites, but in principle it would be possible to do. So
- probably you will use dpaint or some other painting program to create the
- artwork.
-
- A:Can you backup existing cartridges like the game backup systems?
-
- Q:The system is intended for game development. However if you were able
- to obtain ROM images, they can be downloaded just like original code.
- When running a ROM under the system, you can tinker with memory, modify
- gameplay, add lives, etc. You can do all the normal debugging functions,
- like single step, breakpoints, etc, to see how the program is working.
- In the future (Mid March, 1994) a reader will be available for $100 which
- will let you read out the contents of your cartridges.
-
- Q:How fast are downloads?
-
- A:The current board has transfer rates of up to 105K bytes per second. Older
- versions of the board had a 49K bytes per second transfer rate.
-
- Q:What host machines is this available on?
-
- A:Currently the complete system is available on the IBM PC. There is also
- an Amiga version but it has fewer features than the PC version.
-
- Q:Why should I buy your system and not go through Sega?
-
- A:My system is better and cheaper than those provided by Sega. I sell to
- anyone. Sega sells only to large companies. I require no non-disclosure
- statements to be signed. Sega requires you to sign extensive non-disclosure
- statements, and you essentially have to be subservient to them forever.
- If you buy my system you immediately have the ability to create software
- for the Genesis. If you create a game, you can then sell it outrifht or
- attempt to publish it yourself. You wouldn't have to pay Sega any of their
- rediculous royalties on each unit, regardless of how well your program
- sells.
-
- Q:How long has this system been available?
-
- A:It first became available in April 1991. The 2 and 4 megabyte versions
- first became available in February, 1994.
-
- Q:How many have already been sold?
-
- A:I've sold around 30 units so far.
-
- Q:How much does it cost?
-
- A:For the 4 megabyte version the cost is $1600. For the 2 megabyte version
- the cost is $1500. For the duration of March, 1994 there is a special
- introductory price of $1000 for the 2 megabyte version and $1100 for the
- 4 megabyte version. After March, 1994 the price will be raised by $500.
-
- Q:Will it be ported to other platforms?
-
- A:There are no plans to port the software to any other platforms.
-
- Q:What about technical support? How about software upgrades?
-
- A:You can send me email and I will answer questions and help solve your
- problems. If I'm home you can call me. Concerning software support: I want
- you to be happy with this. If you want some program written, and it seems
- like a good idea, chances are I'll do it for free and include it with the
- system. Currently if the software seems sparse it's because no one has
- complained so I guess I include enough. There's no point in writing
- software if it isn't going to be used. In any case software upgrades are
- free unless it's some major upgrade like including a C compiler-I don't
- believe in selling something for hundreds of dollars then nickel and diming
- you on upgrades. EPROM upgrades are free if you send back your originals.
-
- Q:Do we need to pay you any royalty on games developed with the system?
-
- A:No. Once you bought the system you can do anything you want with it-except
- copy it and sell it yourself...
-
- Q:How can I contact you?
-
- A:Send me mail, email or call.
- 818-584-0357
- INTERNET: dash@netcom.com
- David Ashley
- 395 Sierra Madre Villa
- Pasadena, CA 91107
- USA
-
- *****
-
- =============================================================
-
- 4.0 Code samples. The following code was graciously given to
- me by David Ashley, inventor of the GDS. We all owe him a big
- Thanks!
-
- Here's sample code for reading the joystick:
- ------------
- ;jsinit must be called to set up the joystick, otherwise
- reading back will ;have errors. This need only be called
- once.
- jsinit: moveq #$40,d0
- move.b d0,$a10009
- move.b d0,$a1000b
- move.b d0,$a1000d
- rts
- ;The following two routines can be used for reading from the
- joystick
- ;ports.
- ;porta and portb return a byte in d0. 0 bits mean button is
- not down,
- ;1 mean button is down.
- ;The order is:
- ;76543210
- ;SACBRLDU
- ;meaning Start, A, C, B, Right, Left, Down, Up
- porta: move.b #$40,$a10003
- nop
- nop
- move.b $a10003,d1
- andi.b #$3f,d1
- move.b #$00,$a10003
- nop
- nop
- move.b $a10003,d0
- andi.b #$30,d0
- lsl.b #2,d0
- or.b d1,d0
- not.b d0
- rts
- portb: move.b #$40,$a10005
- nop
- nop
- move.b $a10005,d1
- andi.b #$3f,d1
- move.b #$00,$a10005
- nop
- nop
- move.b $a10005,d0
- andi.b #$30,d0
- lsl.b #2,d0
- or.b d1,d0
- not.b d0
- rts
- -----------------------
-
- Graphics code is another matter. Since I sell a development
- system, and one of the features is I provide technical info
- on the Genesis hardware, it would sort of be a conflict of
- interest for me to give things away :^).
-
- -----------------------
-
- The whole sample is not inlcuded because of it's size.
- However you can find the rest of the code, about 5 pages worth, at the
- same locations as this file. Look for a file called code.txt.
- These files will always be posted together.
-
- dc.l $FFFE00,$D7E,$200,$200,$200
- dcb.l $17,$200
- dc.l $E9E,$200,$EAE,$200,$20E
- dcb.l $F,$20E
- dcb.l $F,$200
- dc.b "SEGA MEGA DRIVE (C)SEGA "
- dc.b "1989.AUG _____",$87,"V "
- dc.b " "
- dc.b " ",$87,"V "
- dc.b " "
- dc.b " GM 00054010-01",$93,"G"
- dc.b "JD ",$0,$0,$0,$0,$0,$3,"",$FF
- dc.b $0,"",$0,$0,$0,"",$FF," "
- dc.b " "
- dc.b " "
- dc.b "JUE "
- move #$100,$A11100
-
- =============================================================
-
- 4.11 Four Way Player Tap from Electonic Arts. While no code
- is prodived, here is a hack of sorts. I am honoring the request
- of anonymity from the sender. The $__ are ports calls by the
- software to control the hardware (of couse).
-
- With the EA 4 way play adapter, all the controllers are read through
- controller 1's port after sending the selection data out of controller
- 2's port. The selection data is $0C for controller 1, $1c for controller
- 2, $2c for controller 3, and $3c for controller 4.
-
- The adaptor is detected by setting the registers in the following way.
- (This is from G______ C____ code, so don't ask me why they did some of
- this stupid stuff.)
-
- $40->CTRL1
- $40->CTRL2
- $43->CTRL2 (This doesn't make sense... why set it twice?)
- $7C->DATA2 (This is probably masked off by the $43 above...)
- $7F->CTRL2
- $7C->DATA2
-
- If you read DATA1 and either of the low 2 bits is set, there isn't a 4
- tap. You must enable writing to port two after that so that you can
- select the port.
-
- Well this is the view from inside the machine... hope this helps you
- somewhat.
-
- =============================================================
-
- 4.2 Graphics, Color Palette and sprit control
-
-
- Hi,
-
- I found a file called 'MegaDrive Documentation' on a BBS in Holland.
- I dunno which format it use (maybe an Amiga one) but it's easily redable.
- You'll maybe find some info in it for your faq. So here it is...
-
- Regards,
-
- David Delabassee <delabass@nic.INbe.net>
-
- ==============================================================
-
- DATABASE
- NODE MAIN "Table of Contents"
-
-
- Table of Contents:
-
- {"About" LINK About }
- {"MegaDrive MAP" LINK Megarivemap}
- {"The VRAM" LINK TheVRAM }
- {"The Tiles 8*8" LINK TheTiles8*8}
- {"Horizontal Scrolls" LINK HorizontalScrolls}
- {"The CRAM" LINK TheCRAM}
- {"The Screens Maps" LINK TheScreensMaps}
- {"Priority of Plans" LINK Priority}
- {"The SRAM" LINK TheSRAM}
- {"Sprites List" LINK SpritesList}
- {"Access to the VRAM" LINK AccesstoVRAM}
- {"Video Registers" LINK Video-Registers}
- {"Interruptions" LINK Interruptions}
- {"Exceptions of 68000 of the GENESIS" LINK Exceptions}
-
-
- {"More InFormAtions" LINK Informations}
-
-
-
- NODE About "About"
-
- * MEGADRIVE DOCUMENTATION VERSION 1.0 *
-
- Date : 09-02-94
- Author : All Writen by MuMBlY / {"MYSTIC" LINK Informations}
-
-
- ENDNODE
-
- NODE Megarivemap "megadrive map"
-
- ----------------------------------------------------------------------
- MEGADRIVE MAP
- ----------------------------------------------------------------------
-
- 000000-3FFFFF : 4 Megas Rom Cardtrige
- 400000-9FFFFF : Reserved
- A00000-AFFFFF : I/O Ports
- B00000-BFFFFF : Reserved
- C00000-DFFFFF : Vdp
- E00000-FEFFFF : Ram Image
- FF0000-FFFFFF : 64kb RAM
-
- ENDNODE
-
- NODE TheVRAM "The VRAM"
-
- The VRAM
- ----------------------------------------------------------------------
-
- The 'RAM video' (64 kb) is used for countaining all informations of
- the screen.
-
- - Caracters (tiles) of 8*8 pixels in 16 colors (32 bytes per caracters).
- - Screens (2 screen of 32*32 to 128*128 in 64 colors).
- - Attributs of Sprites (maximum of 80 sprites).
- - Horizontal pointers of scrollings (1 pointer per line).
-
- ENDNODE
-
- NODE TheCRAM "The CRAM"
-
- ----------------------------------------------------------------------
- The CRAM
- ----------------------------------------------------------------------
-
- The 'RAM color' (128 bytes) is used for containing the 4 palettes of 16
- colors (1 word per color).
-
- - Each Color is coded on 12 bits:
- Bit 11-8 : Bleue Value
- Bit 7-4 : Green Value
- Bit 3-0 : Red Value
-
- THe least signicative bit of each value is ignored, that is given a palette
- of 8*8 values =3D 512 differents colors
-
- ENDNODE
-
- NODE TheSRAM "The SRAM"
-
- ----------------------------------------------------------------------
- The SRAM
- ----------------------------------------------------------------------
-
- The 'Scroll RAM' (128 Bytes ?)is used for countaining values of vertical
- scrolling.
-
- ENDNODE
-
- NODE TheTiles8*8 "The Tiles 8*8"
-
- ----------------------------------------------------------------------
- The Tiles 8*8
- ----------------------------------------------------------------------
-
- The Tiles of 8*8 pixels in 16 colors.
- Each tile is longer of 32 bytes.
- The Format is simple : 1 longer word per line*8lines.
- Each Pixel is represented in an half-byte.
-
- Example : dc.1$01111100 ; letter A in Color 1 !
- dc.1$11000110
- dc.1$11000110
- dc.1$11111110
- dc.1$11000110
- dc.1$11000110
- dc.1$11000110
- dc.1$00000000
- ENDNODE
-
- NODE TheScreensMaps "The Screens Maps"
-
- ----------------------------------------------------------------------
- The Screens Maps
- ----------------------------------------------------------------------
-
- The GENESIS is able to manage 2 SUperposed screens (Playfields).
- Each palyfield can do of 32*32 tiles until 128*128 tiles.
- Each tiles is coded on 1 word and are consecutive in the screen map.
-
- The Format is
- Bit 15 : {"Priority" LINK Priority}
- Bit 14-13 : Palette ( 0 to 3 )
- Bit 12 : Vertical Flipping
- Bit 11 : Horizontal Flipping
- Bit 10-0 : Tile number ( 0 to 2047 )
-
- Example :
- dc.w $8001 ; Priority =3D 1, Pallette =3D 0, no Flipping, Tile number #1
-
- ENDNODE
-
- NODE Spriteslist "Sprites LIst"
-
- ----------------------------------------------------------------------
- Sprites List
- ----------------------------------------------------------------------
-
- The GENESIS is able to manage until 80 sprites on the screen.
- The only limit is of 20 sprites per line of pixel and of 320 pixels
- of sprites per line. ( ya can display 20 sprites of 16 pixels of large
- with the same Y-axis but which 10 sprites of 32 pixels of large )
-
- The sprites used the same tiles that the screen.
- THose lastest can do of 1*1 tiles to 4*4 tiles.
-
- Format of the list of sprites to display (8 bytes per sprite) :
-
- byte 0-1 : Y-axis (0 to 511)+$80
- byte 2 : SIze (bit 0-1 : height 0-3+1 , Bit 2-3 : width 0-3+1)
- byte 3 : Link Data ( next sprite in the list or 0 for end of list)
- byte 4-5 : Fisrt number tile sprite (See farther !)
- bute 6-7 : X-axis (0 to 511)+$80
-
- It indicate that the first tile of sprite b'coz the GENESIS deduces
- automaticaly the next as that :
-
- Tile #1:Tile #4 ; Sprite of 16 pixels on 24 pixels
- Tile #2:Tile #5
- Tile #3:Tile #6
- =09
- The format of tile number is same at format of screens
- That's limit the sprites to 16 colors (maxi!).
- The Flipping is indicated for the complete sprite.
-
- example List :
- =09
- dc.w $0+$80 ; Y-axis in the top of screen (0)
- dc.b %0101 ; Size 16*16 pixels
- dc.b 1 ; Number of the next sprite in the List for the priority
- dc.w $4001 ; Palette =3D 2, First tile =3D 1, No Flipping=
- (Tiles#1,#2,#3,#4)
- dc.w $0+$80 ; X =3D 0
- dc.w $40+$80 ; Y =3D 64
- dc.b %0001 ; Size 8*16 pixels
- dc.b 0 ; Last sprite
- dc.w $5001 ; Palette 2, Vertical Flipping, Tile #1 (Tile #1,#2)
- dc.w $40+$80 ; X =3D 64
-
- the order of sprites in the list indicates the priority of sprites between
- them : the first sprite is First Plan.
- ENDNODE
-
- NODE HorizontalScrolls "Horizontal Scrolls"
-
- ----------------------------------------------------------------------
- Horizontal Scrolls
- ----------------------------------------------------------------------
-
- The GENESIS is able to manage an horizontal offset for each line.
-
- The Format for each horizontal offset :
-
- 1 word for each offset of playfield A
- 1 word for each offset of playfield B
- ...
-
- Example :
-
- dc.w $0001 ; A move of 1 pixel about right for playfield A
- dc.w $ffff ; A move of 1 pixel about left for playfield B
- dc.w $0002 ; 2 pixels to right for A (second line)
- dc.w $0003 ; 3 pixels to right for B (second line)
- ...
-
- it's possible to have a pointer which functions for all screen or for all
- tiles or for all lines.
- The numbber of pointer is in function of choose mode.
- ENDNODE
-
- NODE Priority "Priority of Plans"
-
- ----------------------------------------------------------------------
- Priority of Plans
- ----------------------------------------------------------------------
-
- Each Tiles of each screen and each sprite countains a bit of priority.
- That settles the priorities of plans between them and the sprites with
- plans.
- When all bits are to 0 : the sprites are on the screen A which is on the
- screen B. Each bit that we have putting to 1, does moving the plan.
-
- Example :
- Screen B=3D1, Screen A=3D0, Sprite=3D0
- The screen B pass in front of the sprites which goes in front of the
- screen A.
- ENDNODE
-
- NODE AccesstoVRAM "Access to the VRAM"
-
- ----------------------------------------------------------------------
- Access to the VRAM
- ----------------------------------------------------------------------
-
- On MAnual Mode (without SRAM) :
- 2 ports are used : 1 for the address and 1 for the data.
- the two ports are on 32 bits and the address increases itself
- automaticaly.
- the only prolem is that it must to code the address which follows the type
- of RAM that we want to address.
-
- For the VRAM : Address 0-FFFF
-
- ((address and $3fff)+$4000)*$10000+(($1c000 and address)shr 14)
-
- For the CRAM : Address 0-7F
-
- ($c000+address)*$10000
-
- For the SRAM : Address 0-7F ?
-
- (($3fff and address)+$4000)*$10000+$10
-
- The address is putting in the vdp_cmd ($c00004)
-
- The Data is putting in the vdp_dat ($c00000)
-
- Example :
-
- move.1#$c0000000,vdp_cmd ; Address 0 of the CRAM
- move.1#$c0000eee,vdp_dat ; color 0 and 1 of the first palette (black&white)
- move.w#$0444,vdp_dat ; color 2 of the first palette (Dark Grew)
- ENDNODE
-
- NODE Video-Registers "Video Registers"
-
- ----------------------------------------------------------------------
- Video Registers
- ----------------------------------------------------------------------
-
- the write access to video regiters does by the vdp_cmd
- it codes on a word :
-
- Bit 15=3D1 : indicates that's a register
- Bit 14-8 : number of register
- Bit 7-0 : Value to write in the register
-
- Example :
-
- move.w#$8000,vdp_cmd ; Register #0=3D0
- move.1#$81ff8200 ; Register #1=3Dff, register #2=3D0
-
- Register #0
-
- Bit 7 : 0
- Bit 6 : 0
- Bit 5 : 0
- Bit 4 : Control interrupt H(Niv 4) 1:ON 0:OFF
- Bit 3 : 0
- Bit 2 : 1
- Bit 1 : Control mode screen ?
- Bit 0 : 0
-
- Register #1
-
- Bit 7 : 0
- Bit 6 : TV 1:ON 0:OFF
- Bit 5 : Control Interrupt V(Niv 6) 1:ON 0:OFF
- Bit 4 : DMA 1:ENABLE 0:DISABLE
- Bit 3 : 0:NTSC(28 lines Cell) 1:PAL(30 lines Cell)
- Bit 2 : 1
- Bit 1 : 0
- Bit 0 : 0
-
- Register #2
-
- Address of base of the Screen MAP A/$400 (that all the $2000).
-
- Register #3
-
- Address of base of the window/$400 (Third Screen) (D000)
-
- Register #4
-
- Address of base of Screen MAP B/$2000 (E000)
-
- Register #5
-
- Address of base of the list of sprites/$200 (BC00)
-
- Register #6
-
- Not used (0)
-
- Register #7
-
- Background Color (0 to 63) : 'Border' color.
-
- Register #8 and #9
-
- Not used (0)
-
- Register #10
-
- Line counter per H interrupt (0 to 255).
-
- Register #11
-
- Bit 7-4 : 0
- Bit 3 : Level 2 Interrupt 1:ON 0:OFF
- Bit 2 : Vertical Scroll Control 1: An offset per 16 pixels
- 0: An Screen offset
- Bit 1-0 : Horizontal Scroll Control
- 00 : An Screen offset
- 01 : Not Used
- 10 : An offset per cellule
- 11 : An offser per line
-
- Register #12
-
- Bit 7 : Must be as the bit 0
- Bit 6 : 0
- Bit 5 : 0
- Bit 4 : 0
- Bit 3 : Shadow effect between Playfields and the sprites 1:ON 0:OFF
- Bit 2 : Vertival Resolution (224 or 448 pixels)
- Bit 1 : Entrelaced ( only on entrelaced : 448 pixels are possible)
- Bit 0 : 32 Tiles per line or 40 tiles per line (320 or 256 pixels)
-
- Register #13
-
- Address of base for Horizontal Scrolls/$400 (B800)
-
- Register #14
-
- Not used (0)
-
- Register #15
-
- Increase offset of vdp_cmd in word
-
- Register #16
-
- Bit 7-6 : 0
- Bit 5-4 : Size Vertical Screen Maps A and B 00:32 01:64 10:USED 11:128
- Bit 3-2 : 0
- Bit 1-0 : SIze Horizontal Screen Maps A and B ( Same format as Vertical)
-
- Register #17
-
- Horizontal Dimension Window
-
- Register #18
-
- Vertical Dimension Window
-
- Register #19 (93)
-
- Less weight longer transfert DMA
-
- Register #20 (94)
-
- Strong Weight longer transfert DMA
-
- Register #21 (95)
-
- DMA Source Less Weight
-
- Register #22 (96)
-
- DMA Source Strong Weight for VRAM or Middle Weight for RAM
-
- Register #23 (97)
-
- DMA Control
-
- Bit 7 : Source 1:VRAM 0:RAM
- Bit 6 : Source 1:ON 0:OFF (or Bit 23 Source RAM)
- Bit 5-0 : RAM Source ( Bit 22-17)
- In thiz case of RAM Source, the bits 6-0 are considerated as the strong
- weight of the source.
- ENDNODE
-
- NODE Interruptions "Interruptions"
-
- ----------------------------------------------------------------------
- INTERRUPTIONS
- ----------------------------------------------------------------------
-
- The interruptions are of the 68000 : (!!!!!!)
-
- Level 2 : External Interrupt (???)
- Level 4 : H interrupt (Interruption Raster Runs by the VDP)
- Level 6 : V interrupt (Interruption Vertical Blanck)
-
- ...
- ENDNODE
-
- NODE Exceptions "Exceptions of 68000 of the GENESIS"
-
- *****************************************************************
- EXCEPTIONS OF 68000 OF THE GENESIS
- *****************************************************************
-
- $00 SYSTEM SSP
- $04 SYSTEM PC
- $08 BUS ERROR
- $0C ADDRESS ERROR
- $10 ILLEGAL INSTRUCTION
- $14 DIVISION BY ZERO
- $18 CHK EXCEPTION
- $1C TRAPV EXCEPTION
- $20 PRIVILEGE VIOLATION
- $24 TRACE EXCEPTION
- $28 LINE-A EMULATOR
- $2C LINE-F EMULATOR
- $30 RESERVED BY MOTOROLA
- $34 RESERVED BY MOTOROLA
- $38 RESERVED BY MOTOROLA
- $3C RESERVED BY MOTOROLA
- $40 RESERVED BY MOTOROLA
- $44 RESERVED BY MOTOROLA
- $48 RESERVED BY MOTOROLA
- $4C RESERVED BY MOTOROLA
- $50 RESERVED BY MOTOROLA
- $54 RESERVED BY MOTOROLA
- $58 RESERVED BY MOTOROLA
- $5C RESERVED BY MOTOROLA
- $60 SPURIOUS EXCEPTION
- $64 INTERRUPT REQUEST LEVEL 1
- $68 INTERRUPT REQUEST LEVEL 2
- $6C INTERRUPT REQUEST LEVEL 3
- $70 INTERRUPT REQUEST LEVEL 4 (VDP INTERRUPT)
- $74 INTERRUPT REQUEST LEVEL 5
- $78 INTERRUPT REQUEST LEVEL 6 (VERTICAL BLANK)
- $7C INTERRUPT REQUEST LEVEL 7
- $80 TRAP #00 EXCEPTION
- $84 TRAP #01 EXCEPTION
- $88 TRAP #02 EXCEPTION
- $8C TRAP #03 EXCEPTION
- $90 TRAP #04 EXCEPTION
- $94 TRAP #05 EXCEPTION
- $98 TRAP #06 EXCEPTION
- $9C TRAP #07 EXCEPTION
- $A0 TRAP #08 EXCEPTION
- $A4 TRAP #09 EXCEPTION
- $A8 TRAP #10 EXCEPTION
- $AC TRAP #11 EXCEPTION
- $B0 TRAP #12 EXCEPTION
- $B4 TRAP #13 EXCEPTION
- $B8 TRAP #14 EXCEPTION
- $BC TRAP #15 EXCEPTION
- $C0 RESERVED BY MOTOROLA
- $C4 RESERVED BY MOTOROLA
- $C8 RESERVED BY MOTOROLA
- $CC RESERVED BY MOTOROLA
- $D0 RESERVED BY MOTOROLA
- $D4 RESERVED BY MOTOROLA
- $D8 RESERVED BY MOTOROLA
- $DC RESERVED BY MOTOROLA
- $E0 RESERVED BY MOTOROLA
- $E4 RESERVED BY MOTOROLA
- $E8 RESERVED BY MOTOROLA
- $EC RESERVED BY MOTOROLA
- $F0 RESERVED BY MOTOROLA
- $F4 RESERVED BY MOTOROLA
- $F8 RESERVED BY MOTOROLA
- $FC RESERVED BY MOTOROLA
- ENDNODE
-
- NODE InFormAtions "More InFormAtions"
-
- =============================================================
-
- The 68000 keeps all of it's interrupt vectors in the first 1k of memory
- (this is cartridge ROM!) The first 10 longwords are:
- Stack pointer after reset
- Program counter after reset
- Bus Error
- Address Error
- Illegal Instruction
- Division by Zero
- CHK instruction
- TRAPV instruction
- Priviledge violation
- Trace
-
- The external interrupts start at $60 (vector 25-31) and end at $7F. Now
- all videogame units have a variety of interrupts of VBlank and HBlank. If
- you poke arount the interrupt table with the hints I've given you, and
- follow those addresses into the code, you can probably find the VBLANK
- and HBLANK routines for any given game. The vblank routines often read
- the controllers, do DMA, access video RAM, etc. so this is a good short
- cut to find meaty code within the machine! (Look for nice round addresses
- close together... wouldn't those be VDP registers?) HBLANK is even better
- if a game uses it (look at any sonic game!) because they must be short
- (and are thus easily identifiable when traced from the interrupt table
- vectors), generally they only have one or two instructions to load their
- data into the VDP before it will be displayed on the screen, so you
- should immediately be able to figure out how to load palettes into the
- Genesis.
-
- Look atSonic the Hedgehog 1 dissassembly, following the interrupt vectors
- to find the HBLank routine. (All interrupt routines should end in RTE.)
-
- Notice there is one branch and then some set up and a lot of longword
- writes. Try changing these writes to write constant data and then look at
- some section of the game which uses Hblank interrupts. Betcha the colors
- have changed...(oops... the game will hang because the checksum is
- no longer good. You must find the checksum and step over it... trace
- through initialization till you find it... I think it should end on a
- nice round address, but it's been a while so I am not sure. Look for a
- loop with an add in it and nothing else. The checksum is stored in a
- place where changing it will not change the checksum, lots of other data
- like that is there... good luck!) Anyway, if you disable the checksum and
- change the data in hblank then play a board with water I think you will
- understand how to change color palettes on the Genesis!
-
- If you can figure this out, you can probably guess that writing other
- data to the VDP is very similar. Look at the VBlank code to see what it
- does with similar addresses to figure out how to write characters and
- stuff. This is pretty convoluted, unfortunately. I can only suggest that
- you look at very old games for this information as they are programmed
- more simply.
-
- I hope this helps you somewhat. I ask that you don't print this as I have
- written it, and what you do print please don't mention me as I could get
- in trouble. If you do some hacking and get stuck, let me know and I'll
- give you some more hints. I hate not being able to say things directly,
- because I think the Genesis is a wonderful piece of hardware and wish
- everyone could know how great it is.
-
- P.S. don't look at Road Rash, it will drive you INSANE! It seems to run
- entirely in VBLANK and HBLANK! I figured out the 4-TAP by looking for
- Joystick accesses in the VBLANK code... easy!
-
- =============================================================
-
- 5.0 Language Switch, from Rec.Games.Video FAQ
-
- How to make a language switch (Genesis/MD).
-
- On a Genesis/MD, there are jumpers labelled JP1, JP2, JP4,
- and JP3. The Genesis has a capacitor on JP1 and a trace on
- JP2; the Mega Drive has a capacitor on JP2 and a trace on
- JP1. The bottom ends of JP1 and JP2 are connected together.
- So if you cut the trace and the top end of the capacitor, and
- install a DPDT switch between them which reconnects them
- either unchanged or swapped left to right, you have a
- language switch. You'll need some wire, a soldering iron,
- solder, and a DPDT switch.
-
- Some machines have an open circuit instead of the capacitor.
- Also, I've been told that even if there is a capacitor, you
- can throw it out and leave an open circuit. Either way, the
- switch is a lot simpler, requiring a SPDT switch and less
- wire and solder.
-
- Several people have told me that you could just cut both JP1
- and JP2 and put a SPST switch on JP1. This is even simpler,
- but I'm not sure it really works, as opposed to putting your
- machine in an intermediate state that only sort-of works.
-
- The redesigned Genesis 2 machines don't appear to have either
- the capacitor or circuit. Nobody yet knows how to make the
- language switch for one, though there are language switch
- cartridges you can buy to act as one.
-
- IF YOUR MACHINE HAS NO CAPACITOR (or if you want to cross
- your fingers and throw away your capacitor) and is not a
- Genesis 2:
-
- Cut JP2. The trace might be covered with paint and hard to
- see. (If you started with a Mega Drive, JP2 is open and you
- have to cut JP1 instead.) If you aren't sure which end I mean
- by "bottom", just check the back of the board to see which
- end is connected together.
-
- Original state of machine: After cutting:
-
- JP2 top JP1 top JP2 top JP1 top
- | | | |
- | | | |
- |
- |
- |
- |
- | | | |
- \ / \ /
- \_______/ \_______/
- bottom of both bottom of both
-
- Add a SPDT switch which can be in one of two positions:
- ._ _ _ _ _ _ _ _ _ _ _ _
- . .
- . . _ _ _ _ _ _ _ _ _ _
- . . . .
- JP2 top JP1 top . .
- | | . .
- | | _________
- | o o |
- | \ |
- | \ |
- \___o___/
- | | .
- \ / .
- \_______/ - - - - - - - - - - - -
- bottom of both
-
- ._ _ _ _ _ _ _ _ _ _ _ _
- . .
- . . _ _ _ _ _ _ _ _ _ _
- . . . .
- JP2 top JP1 top . .
- | | . .
- | | _________
- | o o |
- | / |
- | / |
- \___o___/
- | | .
- \ / .
- \_______/ - - - - - - - - - - - -
- bottom of both
- -------------------------------------------------------------
-
- IF YOUR MACHINE DOES HAVE THE CAPACITOR:
-
- Cut both sides. (Note: if you started with a Japanese Mega
- Drive the capacitor will be on the side labelled X instead)
-
- Original state of machine: After cutting:
-
- JP2 top JP1 top JP2 top JP1 top
- | | | |
- | | | |
- | |
- | |
- | | |
- X | ### X | ###
- | ### | ###
- | ### | ###
- \ / \ /
- \_______/ \_______/
- bottom of both
-
- add switch which can be in one of two positions:
-
- JP2 top JP1 top
- (Connect 2 to 2
- | |
- and 1 to 1)
- | |
- 2 1 2 1 1 2
- ______________
- _ _ _ _ _ _ _ _ _ _ | o o o o |
- | ` | \ \ |
- X | ###` ` | \ \ |
- | ### ` ` \____o__o____/
- | ### ` ` ' '
- \ / ` `- - - - -' '
- \_______/ ` _ _ _ _ _ _ _ _ '
- bottom of both
-
- JP2 top JP1 top
- (Connect 2 to 2
- | |
- and 1 to 1)
- | |
- 2 1 2 1 1 2
- ______________
- _ _ _ _ _ _ _ _ _ _ | o o o o |
- | ` | / / |
- X | ###` ` | / / |
- | ### ` ` \____o__o____/
- | ### ` ` ' '
- \ / ` `- - - - -' '
- \_______/ ` _ _ _ _ _ _ _ _ '
- bottom of both
-
-
- 50/60 hertz switch.
-
- You can build a 50/60 hertz switch on a Genesis/Mega Drive
- like a language switch, but using jumpers JP3 and JP4. The
- standard setting is 50 in PAL areas such as Europe, and 60 in
- NTSC areas like the US and Japan. In the 60 hertz mode, the
- game is faster and the screen taller; however, not all TVs
- and monitors in Europe can display this mode.
-
-
- Some American/Japanese games are protected to keep Europeans
- >from playing them; this protection checks the 50/60 hertz
- setting. You can usually get around it by installing the
- switch and switching when starting the game, then switching
- back afterwards.
-
- Many European games are simple ports of American or Japanese
- games and are not redesigned for 50 hertz, so work faster and
- with "better" screen proportions if played at 60 hertz.
-
-
- Genesis/Mega Drive dual version (language switch) list:
-
- *Battle Maina 2: The game plays in both positions. However
- with both controlers removed, a system info screen appears
- which informs about system version, langauge mode.
- Bonanza Brothers: Game plays in Japanese. (Maybe. There
- seems to be more than one version floating around.)
- Columns: Game plays in Japanese.
- *Cyberball: Japanese version has a modem option.
- Dragon's Fury: Works only with language set to English.
- The original, Devil's Crush MD, works either way.
- Dynamite Duke: Harder on the Mega Drive.
- Elemental Master: Harder on the Mega Drive.
- Fatal Labyrinth: Game plays in Japanese.
- Fire Shark: Different title screen with Kanji.
- Flicky: Characters have Japanese names and instructions
- are in Japanese.
- Forgotten Worlds: Game plays in Japanese.
- Gaiares: only mentions the Japanese licensee on the title
- screen, and has Japanese text; you can also select
- Japanese text from the option screen.
- Ghostbusters: Game plays in Japanese.
- Ghouls and Ghosts: Different title screen with Kanji. To
- see it on a Genesis, select the last music and sound (26
- and 56) from the options screen, then press lower left;
- A, B, or C; and Start all at the same time. (I never
- tried this, but Gamepro magazine claimed it works.) The
- game shows some other Japanese text, and when you die
- during a boss you start out earlier.
- Insector X: Title screen refers to company as Hot-B, not
- Sage's Creation. The MD version shoots more slowly. The
- ending text is still English.
- *Marvel Land: The Japanese version says "for Mega Drive"
- or "for Genesis" but the language stays Japanese. (What
- does an English version do?)
- Monaco GP: Game plays in Japanese (also an option on the
- option screen).
- Mystic Defender: This game is actually the anime-based
- Kujaku-Ou (Peacock King) 2 game. In Japanese mode, the
- opening text is replaced by a graphics screen (never
- seen in the US version) with Japanese. The levels have
- names, the main character wears a white robe, the
- lightning magic effect is different, and the character
- is named Kujaku in the ending (which is still English).
- Outrun: The attract mode lacks sound, the startup screen
- says "push" (not "press") start button, and "(C) Sega
- 1986, 1991" is printed in reverse order. The default
- options are KM/H and a different button selection (but
- can still be changed on the option screen).
- Quackshot: Game plays in Japanese.
- Raiden Trad: The "licensed to Sega" line is absent on
- both title screens, and the second title screen includes
- only the Japanese part instead of the non-Japanese part
- of the first one.
- Revenge of Shinobi: Title changes to Super Shinobi;
- credits show at the end.
- Rolling Thunder II: The Japanese version only works on a
- Japanese setting. The US version works either way (and
- isn't bilingual).
- Sonic the Hedgehog II: Tails is renamed to "Miles".
- Streets of Rage: Title screen changes to Bare Knuckle,
- and all text is in Japanese, including the introduction.
- The clock resets when you encounter the bosses.
- Streets of Rage II: Turns to Bare Knuckle II, and renames
- Skate to Sammy --_if_ you change the setting sometime
- after turning the machine on (to skip the lockout).
- Thunder Force II: Title screen has "MD" on it, and
- company name is "Tecnosoft".
- Thunder Force III: company's name is spelled "Tecnosoft".
- *Thunder Storm FX (CD): Turns to Cobra Command in US mode.
- Truxton: Japanese title is Tatsujin.
- Twin Hawk: Different title screen with Kanji.
- *Wrestle War: The wrestler is blond on a Genesis and
- black-haired on a MD.
-
- * Information from testing a Japanese game
-
- =============================================================
-
- 6.0 Sega Internet Information - This information came from
- Bernd P. Ziller. Mailing to any of these site (or FTP, gopher,
- etc.) will not work due to a firewall. They are looking out, but
- we can't look in. I stongly suggest that you don't try anything
- stupid.
-
- segaoa.com 198.176.13.13 130slmail 198.176.14.65
- loghost 198.176.13.13 localhost 127.0.0.1
- 400mail 198.176.14.57 pd275 198.176.14.68
- trixie 198.176.9.40 torcable 198.176.14.53
- pd130 198.176.14.61 storm 198.176.11.47
- segaintera 198.176.14.52 segaoa 198.176.13.13
- sonic 198.176.13.13 blackhole 198.176.14.69
- multimedia 198.176.14.63 pd1 198.176.14.62
- segard 198.176.14.51 segaeurope 198.176.14.50
- tormail 198.176.14.54 si32 198.176.14.55
- sb1mail 198.176.14.60 macpo 198.176.14.67
- pluto 198.176.9.52 fremontml 198.176.14.56
- racerx 198.176.9.41 hummer 198.176.11.55
- 303tdmail 198.176.14.64 sb2mail 198.176.14.58
- ftp 198.176.13.13 gambit 198.176.11.46
- Emerald_Dragon 198.176.8.22
-
- =============================================================
-
- I am still hoping to expand this document. I am looking for
- information on the Sega Multitap, CD, 32-X (Mars), HMD, hardware
- in general, Saturn, and the controllers.
-
- Please E-Mail me for a copy or to add information to this
- list. Again My E-Mail address is:
-
- U6c16@Wvnvm.Wvnet.Edu
-
- Snail Mail:
-
- Henry Rieke
- Attn: Sega FAQ
- 161 Poplar Dr
- Morgantown, Wv 26505-2340
-
- A Very Special Thanks to:
-
- David Ashley <dash@netcom.com>
-
- Rober Leyland <Leyland@island.COM>
-
- David Delabassee <delabass@nic.INbe.net>
-
- Special Thanks to :
-
- Scott Golby <sgolby@st.nepean.uws.edu.au>
-
- Rick McTeague <sysrick@starbase.spd.louisville.edu>
-
- Landon Dyer <landon@apple.com>
-
- Neal Howland <nhowland@matt.ksu.ksu.edu>
-
- Bernd P. Ziller <bziller@ba-stuttgart.de>
- WPCD12cpiPanasonic
- KX-P118017 Feb 94 09:30:55 +0100
- From:
- Subject: Re: What Language are games programmed in?
- To: U6C16@WVNVM.BITNET
- Message-id: <9402170830.AA16515@leda.pt.hk-r.se>
- X-Envelope-to: U6C16@WVNVM.BITNET
-
- Heres an extract from the game _____. I just included some of the beginning
- of the code and some ASCII segments. I hope you are satisfied with this.
-
-
-
-
- dc.l $FFFE00,$D7E,$200,$200,$200
- dcb.l $17,$200
- dc.l $E9E,$200,$EAE,$200,$20E
- dcb.l $F,$20E
- dcb.l $F,$200
- dc.b "SEGA MEGA DRIVE (C)SEGA "
- dc.b "1989.AUG _____",$87,"V "
- dc.b " "
- dc.b " ",$87,"V "
- dc.b " "
- dc.b " GM 00054010-01",$93,"G"
- dc.b "JD ",$0,$0,$0,$0,$0,$3,"",$FF
- dc.b $0,"",$0,$0,$0,"",$FF," "
- dc.b " "
- dc.b " "
- dc.b "JUE "
- move #$100,$A11100
- nop
- rte
- bra.s $20C
- bra.s $20E
- move.l a6,d5
- lea $C00004,a5
- move.l #$940000,d4
- move d6,d4
- lsl.l #8,d4
- move #$9300,d4
- move.b d6,d4
- move.l d4,(a5)
- lsr.l #1,d5
- and.l #$7FFFFF,d5
- move.l #$960000,d4
- move d5,d4
- lsl.l #8,d4T move.b d5,d4
- move.l d4,(a5)
- swap d5
- move #$9700,d4
- move.b d5,d4
- move d4,(a5)
- or #$80,d7
- swap d7
- move d7,(a5)
- swap d7
- move d7,-(a7)
- move (a7)+,(a5)
- rts
- move.l #$7C000002,$C00004
- move.l #$0,$C00000
- rts
- bsr $3BCC
- lea $FFFFC800.w,a6
- moveq #$0,d6
- move #$13F,d7
- move d6,(a6)+
- dbf d7,$282
- move.l #$78000002,d7
- move #$13F,d6
- bra $2B8
- move.l #$40000003,d7
- bra $2A6
- move.l #$60000003,d7
- move #$1FFF,d6
- bra $2B8
- move.l #$60000002,d7
- move #$DFF,d6
- moveq #$0,d5
- move #$8F01,$C00004
- lea $C00004,a5
- move.l #$940000,d4
- move d6,d4
- lsl.l #8,d4
- move #$9300,d4
- move.b d6,d4
- move.l d4,(a5)
- move #$9780,(a5)
- or.l #$40000080,d7
- move.l d7,(a5)
- move.b d5,$C00000
- move (a5),d4
- btst #$1,d4
- bne.s $2EC
- move #$8F02,(a5)
- rts
- move.l #$40000010,d7
- moveq #$28,d6
- moveq #$0,d5T move d5,$C00000
- dbf d6,$30A
- rts
- lea $C00000,a5
- move.l #$800000,d3
- move.l d7,$C00004
- move d6,d2
- move (a6)+,(a5)
- dbf d2,$32A
- add.l d3,d7
- dbf d5,$322
- rts
- move d6,d2
- lea (a5),a4
- move d4,(a5)+
- addq #1,d4
- dbf d2,$33C
- lea $80(a4),a5
- dbf d5,$338
- rts
- bset #$6,$FFFFC127.w
- bra.s $36E
- move.l #$C0200000,$C00004
- move #$0,$C00000
- bclr #$6,$FFFFC127.w
- move $FFFFC126.w,$C00004
- rts
- bset #$0,$FFFFC15E.w
- moveq #$0,d0
- moveq #$0,d1
- move.b (a6)+,d0
- lea $FFFFC080.w,a1
- add d0,a1
- move.b (a6)+,d0
- move (a6)+,(a1)+
- dbf d0,$38C
- rts
- bclr #$0,$FFFFC15E.w
- beq.s $3CE
- btst #$6,$A10001
- beq.s $3AE
- move #$6EE,d0
- dbf d0,$3AA
- lea $C00004,a5
- move.l #$94009340,(a5)
- move.l #$96E09540,(a5)
- move #$977F,(a5)
- move #$C000,(a5)
- move #$80,-(a7)
- move (a7)+,(a5)
- rts
- moveq #$7,d1
- lea $FFFFC080.w,a6T moveq #$E,d7
- move (a6),d4
- move d4,d2
- and d7,d2
- beq.s $3E4
- subq #2,d2
- asl #4,d7
- move d4,d3
- and d7,d3
- beq.s $3F0
- sub #$20,d3
- asl #4,d7
- and d7,d4
- beq.s $3FA
- sub #$200,d4
- or d2,d3
- or d3,d4
- move d4,(a6)+
- dbf d0,$3D8
- bset #$0,$FFFFC15E.w
- moveq #$7,d2
- moveq #$1,d0
- jsr $F80(pc)
- dbf d2,$40C
- dbf d1,$3D2
- rts
- moveq #$1F,d0
- lea $FFFFC080.w,a2
- lea -$80(a2),a1
- move.l (a2)+,(a1)+
- dbf d0,$426
- moveq #$1F,d0
- clr.l (a1)+
- dbf d0,$42E
- rts
- moveq #$E,d1
- lea $FFFFC080.w,a6
- lea -$80(a6),a1
- moveq #$3F,d0
- move d1,d5
- moveq #$E,d7
- move (a1)+,d4
- move d4,d2
- and d7,d2
- sub d5,d2
- bpl.s $452
- moveq #$0,d2
- asl #4,d7
- asl #4,d5
- move d4,d3
- and d7,d3
- sub d5,d3
- bpl.s $460T asl #4,d7
- asl #4,d5
- and d7,d4
- sub d5,d4
- bpl.s $46C
- moveq #$0,d4
- or d2,d3
- or d3,d4
- move d4,(a6)+
- dbf d0,$442
- cmp #$8020,$FFFFC142.w
- bne.s $48E
- lea $FFFFC0A0.w,a2
- lea -$80(a2),a1
- moveq #$7,d0
- move.l (a1)+,(a2)+
- dbf d0,$488
- moveq #$7,d2
- bset #$0,$FFFFC15E.w
- jsr $F7E(pc)
- dbf d2,$496
- subq #2,d1
- bpl.s $438
- rts
-
-
- ........
-
-
- move #$B4,$FFFFC150.w
- clr $FFFFC152.w
- moveq #-$79,d7
- jsr $748.w
- lea $16F8,a0
- jsr $14F4(pc)
- lea $1700,a0
- jsr $14F4(pc)
- lea $1296(pc),a6
- lea $FF03A0,a5
- jsr $197A
- lea $FF25A0,a5
- lea $1274(pc),a6
- bsr $19E8
- lea $FF359A,a5
- lea $127E(pc),a6
- bsr $19E8
- lea $FF37A2,a5
- lea $128E(pc),a6
- bra $19E8
- dc.b "GAME OVER",$0,"CONTINUE PLAY "
- dc.b "^",$0,"YES NO",$0,$0,"PLAYER 1",$0,$0,$0,$0,$0,$0
-
- T dc.b "NUS@@@@@@@@@@@@@@@",$0,"MISSI"
- dc.b "ON COMPLETED BONUS@@",$0,"MIN"
- dc.b "//SEC",$0,"OVER/////SEC///NO/"
- dc.b "BONUS",$0,"UNDER////SEC",$0,"PTS",$0,"P"
- dc.b "TS",$0,"PTS",$0,$0
- dc.b "INFILTRATE ENEMY LINES?",$0
- dc.b $12,"RESCUE SECRET AGENT?",$0,$0,$14
- dc.b "GO TO THE ARSENAL?",$0,$8,"BLOW"
- dc.b " UP ALL THE ENEMY WEAPON"
- dc.b "S?",$0,$10,"PENETRATE THE FORTRE"
- dc.b "SS?",$0,$E,"RESCUE COLONEL TRAU"
- dc.b "TMAN?",$0,$0,"PLAYER 1 START",$0,$0
-
-